package logic;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import bean.Arma;
import bean.Logro;
import bean.juego.AccionBanderaJuego;
import bean.juego.Juego;
import bean.juego.JuegoCTF;
import bean.jugador.AccionesBandera.Acciones;
import bean.jugador.Jugador;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import util.Pair;

public class Main {

    private static final String EOL = System.getProperty("line.separator");

    public static void main(String[] args) {
        try {

            Juego j = Buscador.getListaJuegos().get(Buscador.getListaJuegos().size() - 1);

            if (j instanceof JuegoCTF) {
                JuegoCTF juego = (JuegoCTF) j;

                List<AccionBanderaJuego> accs = juego.getAccionesBandera();

                for (AccionBanderaJuego accionBanderaJuego : accs) {
                    if (accionBanderaJuego.getAccion().equals(Acciones.MUERTEBANDERISTA)) {
                        System.out.println("yay");
                    }
                }

            } else {
                System.out.println("No instance");
            }

        } catch (Exception e) {
            e.printStackTrace(System.out);
        }
    }


    private String printResults() {
        StringBuilder sb = new StringBuilder();

        for (Jugador j : Buscador.getJugadores()) {

            sb.append("Nombre: ").append(j.getDatos().getNombre()).append(EOL);

            boolean first = true;
            sb.append("Known Aliases: ");
            for (String apodo : j.getDatos().getApodos()) {
                if (apodo.equals(j.getDatos().getNombre())) {
                    continue;
                }
                if (first) {
                    first = false;
                } else {
                    sb.append(", ");
                }
                sb.append(apodo);
            }
            sb.append(EOL);
            sb.append(EOL);

            sb.append("Logros").append(EOL);
            for (Logro logro : j.getLogros().keySet()) {
                sb.append('\t').append(logro.toString()).append(": ").append(j.getLogros().get(logro)).append(" veces").append(EOL);
            }
            sb.append(EOL);

            sb.append("Acciones en Capture the Flag").append(EOL);
            sb.append('\t').append("Banderas Capturadas: ").append(j.getAccionesBandera().getBanderasCapturadas()).append(EOL);
            sb.append('\t').append("Banderas Encontradas: ").append(j.getAccionesBandera().getBanderasEncontradas()).append(EOL);
            sb.append('\t').append("Banderas Retornadas: ").append(j.getAccionesBandera().getBanderasRetornadas()).append(EOL);
            sb.append('\t').append("Banderistas Muertos: ").append(j.getAccionesBandera().getBanderistasMuertos()).append(EOL);
            sb.append(EOL);

            sb.append("Muertes").append(EOL);
            sb.append('\t').append("Hechas: ").append(j.getMuertesHechas().size()).append(EOL);
            sb.append('\t').append("Recibidas: ").append(j.getMuertesRecibidas().size()).append(EOL);
            sb.append(EOL);


            List<Pair<Arma, Integer>> listaPorArma = Filtro.muertesJugadorPorArma(j);
            Collections.sort(listaPorArma, new Comparator<Pair<Arma, Integer>>() {

                @Override
                public int compare(Pair<Arma, Integer> o1, Pair<Arma, Integer> o2) {
                    return o2.getSecond().compareTo(o1.getSecond());
                }
            ;
            });

			sb.append("Armas preferidas: ").append(EOL);
            for (Pair<Arma, Integer> pair : listaPorArma) {
                sb.append('\t').append(pair.getSecond()).append(" muertes hechas con ").append(pair.getFirst().getNombre());
                sb.append('\t').append("(").append(Filtro.cantidadMuertesJugadorPorArma(j, pair.getFirst())).append(" recibidas)");
                sb.append(EOL);
            }
            sb.append(EOL);


            List<Pair<Jugador, Integer>> listaPorJugador = Filtro.muertesJugadorPorJugador(j);
            Collections.sort(listaPorJugador, new Comparator<Pair<Jugador, Integer>>() {

                @Override
                public int compare(Pair<Jugador, Integer> o1, Pair<Jugador, Integer> o2) {
                    return o2.getSecond().compareTo(o1.getSecond());
                }
            ;
            });
			sb.append("Enemigos preferidos: ").append(EOL);
            for (Pair<Jugador, Integer> pair : listaPorJugador) {
                sb.append('\t').append(pair.getSecond()).append(" matado a ").append(pair.getFirst().getDatos().getNombre());
                sb.append('\t').append("(").append(Filtro.cantidadMuertesJugadorAJugador(pair.getFirst(), j)).append(" recibidas)");
                sb.append(EOL);
            }
            sb.append(EOL);
            sb.append("-------------------------------------------------------------------------------");
            sb.append(EOL);
            sb.append(EOL);
        }

        return sb.toString();
    }
}
